package com.teradata.mybatils.generator;

import io.micrometer.core.instrument.config.InvalidConfigurationException;
import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 1、接口式编程
 *  原生： Dao   ---->   DaoImpl
 *  mybatis:   Mapper ----> xxxMapper.xml
 *
 * 2、SqlSession代表和数据库的一次会话，用完必须关闭
 *
 * 3、SqlSession和Connection一样，是非线程安全的。每次使用都应该去获取新的对象。
 *
 * 4、mapper接口没有实现类，但是mybatis会为这个接口生成一个代理对象。
 *  之所以能进行以下操作，重要的问题是要进行接口和类的绑定。
 * EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
 *
 * 5、两个重要配置文件：
 *  1）、mybatis全局配置文件：包含数据库连接池，事务管理器。。。系统运行环境信息
 *  2）、sql映射文件：保存了一个sql语句的映射信息：
 *          将sql抽取了出来
 */
public class GeneratorMybatis {

    //private SqlSession sqlSession;  放这里是不安全的。


    /*private SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybaits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }*/

    @Test
    public void testMbgLuxury() throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException, org.mybatis.generator.exception.InvalidConfigurationException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("mbg-luxury.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }

}